# 这个是我自定义的函数
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
import json

# AES-128-CBC 加密
def encrypt_by_aes(data, key, iv):
    # 将数据编码为字节
    data = data.encode('utf-8')
    # 创建 AES 加密器
    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
    # 填充数据
    padded_data = pad(data, AES.block_size)
    # 加密数据
    encrypted_data = cipher.encrypt(padded_data)
    # 对加密后的数据进行 Base64 编码
    return base64.b64encode(encrypted_data).decode('utf-8')

# AES-128-CBC 解密
def decrypt_by_aes(data, key, iv):
    # 对 Base64 编码的数据进行解码
    encrypted_data = base64.b64decode(data)
    # 创建 AES 解密器
    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
    # 解密数据
    decrypted_data = cipher.decrypt(encrypted_data)
    # 去除填充
    unpadded_data = unpad(decrypted_data, AES.block_size)
    try:
        # 尝试将解密后的数据解析为 JSON
        return json.loads(unpadded_data.decode('utf-8'))
    except json.JSONDecodeError:
        # 如果不是有效的 JSON 数据，返回解码后的字符串
        return unpadded_data.decode('utf-8')

import hashlib
# MD5 加密方法
def md5(data):
    # 创建 MD5 对象
    md5 = hashlib.md5()
    # 更新 MD5 对象的内容
    md5.update(data.encode('utf-8'))
    # 获取加密后的十六进制字符串
    return md5.hexdigest()
phone = "13882424161"
print(md5(phone))

# 待加密的数据
data =  "{\"orderNumber\":\"123456789\",\"productName\":\"demo\",\"price\":500}"
# 密钥，长度必须为 16 字节
key = 'c7bc6f032be58963'
# 初始化向量（IV），长度必须为 16 字节
iv = 'C235E0BEM01Z7B87'

# 调用加密方法
encrypted_data = encrypt_by_aes(data, key, iv)
print("加密后的数据:", encrypted_data)

# 调用解密方法
decrypted_data = decrypt_by_aes(encrypted_data, key, iv)
print("解密后的数据:", decrypted_data)

phone = "13882424161"
print(md5(phone))